package vistas.paneles;

import java.awt.Dimension;
import java.awt.GridBagConstraints;
import java.awt.GridBagLayout;
import java.awt.Insets;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.awt.event.KeyEvent;
import java.awt.event.KeyListener;
import java.awt.event.MouseEvent;
import java.awt.event.MouseListener;

import javax.swing.BorderFactory;
import javax.swing.Box;
import javax.swing.BoxLayout;
import javax.swing.JButton;
import javax.swing.JPanel;
import javax.swing.JScrollPane;
import javax.swing.JTable;

import daos.AtletaDAO;
import daos.EntrenadorDAO;
import daos.EventoDAO;
import daos.MaterialDAO;
import daos.UsuariosDAO;
import vistas.abstractModels.AtletaTableModel;
import vistas.abstractModels.EntrenadorTableModel;
import vistas.abstractModels.EventoTableModel;
import vistas.abstractModels.MaterialTableModel;
import vistas.abstractModels.UsuarioTableModel;
import vistas.ventanas.EditarAtleta;
import vistas.ventanas.EditarEntrenador;
import vistas.ventanas.EditarEvento;
import vistas.ventanas.EditarMaterial;
import vistas.ventanas.EditarUsuario;

public class Admin extends JPanel {
	/**
	 * 
	 */
	private static final long serialVersionUID = 1L;
	private JPanel top, bottom;
	private JButton entrenadores;
	private JButton atletas;
	private JButton material;
	private JButton eventos;
	private JButton usuarios;
	// --------------------------------------- componente
	private JTable listado;
	private JScrollPane listScroller;
	private EntrenadorDAO entrenadorDAO;
	private AtletaDAO atletaDAO;
	private EventoDAO eventoDAO;
	private MaterialDAO materialDAO;
	private UsuariosDAO usuarioDAO;
	private Integer vista_actual = ENTRENADOR;
	String columnas[] = { "Cédula", "Nombre" };
	// -------------------------------------- subcomponente botones
	private JPanel grupo;
	private JButton agregar, modificar, eliminar;

	public static final int ENTRENADOR = 0;
	public static final int ATLETA = 1;
	public static final int MATERIAL = 2;
	public static final int EVENTO = 3;
	public static final int USUARIOS = 4;

	public Admin() {

		instancias();

		agregar_componentes();

		setListeners();

	}

	private void agregar_componentes() {
		grupo.setLayout(new BoxLayout(grupo, BoxLayout.Y_AXIS));
		// top.setLayout(new BoxLayout(top, BoxLayout.X_AXIS));
		// top.setBorder(BorderFactory.createEmptyBorder(0, 20, 0, 20));
		bottom.setLayout(new BoxLayout(bottom, BoxLayout.X_AXIS));

		grupo.add(agregar);
		grupo.add(Box.createRigidArea(new Dimension(10, 10)));
		grupo.add(modificar);
		grupo.add(Box.createRigidArea(new Dimension(10, 10)));
		grupo.add(eliminar);

		top.setAlignmentX(LEFT_ALIGNMENT);
		top.add(entrenadores);
		top.add(atletas);
		top.add(material);
		top.add(eventos);
		top.add(usuarios);

		bottom.add(listScroller);

		GridBagLayout gridbag = new GridBagLayout();
		GridBagConstraints c = new GridBagConstraints();
		setLayout(gridbag);
		c.fill = GridBagConstraints.HORIZONTAL;

		// c.weighty = 0;//request any extra vertical space
		// c.weightx = 0;
		c.anchor = GridBagConstraints.WEST; // bottom of space
		c.gridwidth = 1;// columns wide
		c.gridy = 0;
		c.gridx = 0;
		c.insets = new Insets(10, 50, 10, 10);
		gridbag.setConstraints(top, c);
		add(top);

		c.weighty = 0;// request any extra vertical space
		c.anchor = GridBagConstraints.SOUTH; // bottom of space
		// c.gridwidth = 1;//2 columns wide
		c.gridy = 1;
		c.gridx = 1;
		c.insets = new Insets(10, 10, 15, 20);
		gridbag.setConstraints(grupo, c);
		add(grupo);

		c.weightx = 1.0;// request any extra vertical space
		c.weighty = 1.0;// request any extra vertical space
		// c.gridwidth = 4;//2 columns wide
		c.gridy = 1;
		c.gridx = 0;
		c.insets = new Insets(10, 50, 10, 10);
		c.ipady = 5000;
		c.ipadx = 30000;
		gridbag.setConstraints(bottom, c);
		add(bottom);
	}

	private void instancias() {
		top = new JPanel();
		bottom = new JPanel();
		entrenadores = new JButton("Entrenadores");
		atletas = new JButton("Atletas");
		material = new JButton("Material deportivo");
		eventos = new JButton("Eventos");
		usuarios = new JButton("Usuarios");
		listado = new JTable();
		// listado.getTableHeader().setEnabled(false);
		listScroller = new JScrollPane(listado);
		entrenadorDAO = new EntrenadorDAO();
		atletaDAO = new AtletaDAO();
		materialDAO = new MaterialDAO();
		eventoDAO = new EventoDAO();
		usuarioDAO = new UsuariosDAO();
		// ---------------- ^__^ -----------------------

		grupo = new JPanel();
		agregar = new JButton("Agregar");
		agregar.setEnabled(false);
		eliminar = new JButton("Eliminar");
		eliminar.setEnabled(false);
		modificar = new JButton("Modificar");
		modificar.setEnabled(false);
	}

	void setListeners() {

		listado.addMouseListener(new MouseListener() {

			@Override
			public void mouseReleased(MouseEvent e) {
				// TODO Auto-generated method stub

			}

			@Override
			public void mousePressed(MouseEvent e) {
				// TODO Auto-generated method stub

			}

			@Override
			public void mouseExited(MouseEvent e) {
				// TODO Auto-generated method stub

			}

			@Override
			public void mouseEntered(MouseEvent e) {
				// TODO Auto-generated method stub

			}

			@Override
			public void mouseClicked(MouseEvent e) {
				modificar.setEnabled(true);
				eliminar.setEnabled(true);
			}
		});

		listado.addKeyListener(new KeyListener() {

			@Override
			public void keyTyped(KeyEvent e) {
				modificar.setEnabled(true);
				eliminar.setEnabled(true);

			}

			@Override
			public void keyReleased(KeyEvent e) {
				// TODO Auto-generated method stub

			}

			@Override
			public void keyPressed(KeyEvent e) {
				// TODO Auto-generated method stub

			}
		});

		entrenadores.addActionListener(new ActionListener() {

			@Override
			public void actionPerformed(ActionEvent e) {
				listado.setModel(new EntrenadorTableModel(entrenadorDAO
						.obtenListaEntrenador()));
				listScroller.setBorder(BorderFactory
						.createTitledBorder("Entrenadores"));
				agregar.setEnabled(true);
				vista_actual = ENTRENADOR;
				modificar.setEnabled(false);
				eliminar.setEnabled(false);

			}
		});
		
		usuarios.addActionListener(new ActionListener() {

			@Override
			public void actionPerformed(ActionEvent e) {
				listado.setModel(new UsuarioTableModel(usuarioDAO.obtenListaUsuarios()));
				listScroller.setBorder(BorderFactory
						.createTitledBorder("Usuarios"));
				agregar.setEnabled(true);
				vista_actual = USUARIOS;
				modificar.setEnabled(false);
				eliminar.setEnabled(false);

			}
		});

		atletas.addActionListener(new ActionListener() {

			@Override
			public void actionPerformed(ActionEvent e) {
				listado.setModel(new AtletaTableModel(atletaDAO
						.obtenListaAtleta(), AtletaTableModel.FULL));
				listScroller.setBorder(BorderFactory
						.createTitledBorder("Atletas"));
				agregar.setEnabled(true);
				vista_actual = ATLETA;
				modificar.setEnabled(false);
				eliminar.setEnabled(false);

			}
		});

		material.addActionListener(new ActionListener() {

			@Override
			public void actionPerformed(ActionEvent e) {
				listado.setModel(new MaterialTableModel(materialDAO
						.obtenListaMaterial()));
				listScroller.setBorder(BorderFactory
						.createTitledBorder("Material"));
				agregar.setEnabled(true);
				vista_actual = MATERIAL;
				modificar.setEnabled(false);
				eliminar.setEnabled(false);

			}
		});
		
		eventos.addActionListener(new ActionListener() {

			@Override
			public void actionPerformed(ActionEvent e) {
				listado.setModel(new EventoTableModel(eventoDAO.obtenListaEventos()));
				listScroller.setBorder(BorderFactory
						.createTitledBorder("Eventos"));
				agregar.setEnabled(true);
				vista_actual = EVENTO;
				modificar.setEnabled(false);
				eliminar.setEnabled(false);

			}
		});

		agregar.addActionListener(new ActionListener() {

			@Override
			public void actionPerformed(ActionEvent e) {
				if (vista_actual == ENTRENADOR) {
					EditarEntrenador entrenador = new EditarEntrenador();
					entrenador.setModal(true);
					listado.setModel(new EntrenadorTableModel(entrenadorDAO
							.obtenListaEntrenador()));
				}
				if (vista_actual == ATLETA) {
					EditarAtleta atleta = new EditarAtleta();
					atleta.setModal(true);
					listado.setModel(new AtletaTableModel(atletaDAO
							.obtenListaAtleta(), AtletaTableModel.FULL));
				}
				if (vista_actual == MATERIAL) {
					EditarMaterial material = new EditarMaterial();
					material.setModal(true);
					listado.setModel(new MaterialTableModel(materialDAO
							.obtenListaMaterial()));
				}
				if (vista_actual == EVENTO) {
					EditarEvento evento = new EditarEvento();
					evento.setModal(true);
					listado.setModel(new EventoTableModel(eventoDAO
							.obtenListaEventos()));
				}
				if (vista_actual == USUARIOS) {
					EditarUsuario usuario = new EditarUsuario();
					usuario.setModal(true);
					listado.setModel(new UsuarioTableModel(usuarioDAO
							.obtenListaUsuarios()));
				}
				
				modificar.setEnabled(false);
				eliminar.setEnabled(false);

			}
		});

		modificar.addActionListener(new ActionListener() {

			@Override
			public void actionPerformed(ActionEvent e) {
				if (vista_actual == ENTRENADOR) {
					Integer identificador = Integer.parseInt((String) listado
							.getValueAt(listado.getSelectedRow(), 0));
					EditarEntrenador entrenador = new EditarEntrenador(
							identificador, EditarEntrenador.MODIFICAR);
					entrenador.setModal(true);
					listado.setModel(new EntrenadorTableModel(entrenadorDAO
							.obtenListaEntrenador()));
				}

				if (vista_actual == ATLETA) {
					Integer identificador = Integer.parseInt((String) listado
							.getValueAt(listado.getSelectedRow(), 0));
					EditarAtleta atleta = new EditarAtleta(identificador,
							EditarAtleta.MODIFICAR);
					atleta.setModal(true);
					listado.setModel(new AtletaTableModel(atletaDAO
							.obtenListaAtleta(), AtletaTableModel.FULL));
				}

				if (vista_actual == MATERIAL) {
					Integer identificador = Integer.parseInt((String) listado
							.getValueAt(listado.getSelectedRow(), 0));
					EditarMaterial material = new EditarMaterial(identificador,
							EditarMaterial.MODIFICAR);
					material.setModal(true);
					listado.setModel(new MaterialTableModel(materialDAO
							.obtenListaMaterial()));
				}
				if (vista_actual == EVENTO) {
					Integer identificador = Integer.parseInt((String) listado
							.getValueAt(listado.getSelectedRow(), 0));
					EditarEvento evento = new EditarEvento(identificador,
							EditarEvento.MODIFICAR);
					evento.setModal(true);
					listado.setModel(new EventoTableModel(eventoDAO
							.obtenListaEventos()));
				}
				
				if (vista_actual == USUARIOS) {
					Integer identificador = Integer.parseInt((String) listado
							.getValueAt(listado.getSelectedRow(), 0));
					EditarUsuario usuario = new EditarUsuario(identificador,
							EditarUsuario.MODIFICAR);
					usuario.setModal(true);
					listado.setModel(new UsuarioTableModel(usuarioDAO
							.obtenListaUsuarios()));
				}
				
				modificar.setEnabled(false);
				eliminar.setEnabled(false);

			}
		});

		eliminar.addActionListener(new ActionListener() {

			@Override
			public void actionPerformed(ActionEvent e) {
				if (vista_actual == ENTRENADOR) {
					Integer identificador = Integer.parseInt((String) listado
							.getValueAt(listado.getSelectedRow(), 0));
					EditarEntrenador entrenador = new EditarEntrenador(
							identificador, EditarEntrenador.ELIMINAR);
					entrenador.setModal(true);
					listado.setModel(new EntrenadorTableModel(entrenadorDAO
							.obtenListaEntrenador()));
				}

				if (vista_actual == ATLETA) {
					Integer identificador = Integer.parseInt((String) listado
							.getValueAt(listado.getSelectedRow(), 0));
					EditarAtleta atleta = new EditarAtleta(identificador,
							EditarAtleta.ELIMINAR);
					atleta.setModal(true);
					listado.setModel(new AtletaTableModel(atletaDAO
							.obtenListaAtleta(), AtletaTableModel.FULL));
				}

				if (vista_actual == MATERIAL) {
					Integer identificador = Integer.parseInt((String) listado
							.getValueAt(listado.getSelectedRow(), 0));
					EditarMaterial material = new EditarMaterial(identificador,
							EditarMaterial.ELIMINAR);
					material.setModal(true);
					listado.setModel(new MaterialTableModel(materialDAO
							.obtenListaMaterial()));
				}
				
				if (vista_actual == EVENTO) {
					Integer identificador = Integer.parseInt((String) listado
							.getValueAt(listado.getSelectedRow(), 0));
					EditarEvento evento = new EditarEvento(identificador,
							EditarEvento.ELIMINAR);
					evento.setModal(true);
					listado.setModel(new EventoTableModel(eventoDAO
							.obtenListaEventos()));
				}
				
				if (vista_actual == USUARIOS) {
					Integer identificador = Integer.parseInt((String) listado
							.getValueAt(listado.getSelectedRow(), 0));
					EditarUsuario usuario = new EditarUsuario(identificador,
							EditarUsuario.ELIMINAR);
					usuario.setModal(true);
					listado.setModel(new UsuarioTableModel(usuarioDAO
							.obtenListaUsuarios()));
				}
				
				modificar.setEnabled(false);
				eliminar.setEnabled(false);

			}
		});
	}

}
